//Programa que muestra cómo crear threads
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
/* Prototipos de las funciones que ejecutan los threads */
void *func1 (void *);
void *func2 (void *);
pthread_t thread1, thread2, thmain;
pthread_attr_t attr;
/* Declaración de los threads */
/* atributos de los threads */
/* Definición de las funciones func1 y func2 */
void *func1 (void *arg)
{
    pthread_t tid = pthread_self(); /* identificador de thread*/
    printf("Soy el thread 1 y voy a ejecutar func1 \n");
    sleep(2);
    printf("Soy el thread 1 y he terminado de ejecutar la función 1\n");
    pthread_exit(NULL); /* Provoca la terminación del thread*/
}
void *func2 (void *arg)
{
    pthread_t tid = pthread_self();
    /* identificador de thread*/
    printf("Soy el thread 2 y voy a ejecutar func2 \n");
    sleep(5);
    printf("Soy el thread 2 y he terminado de ejecutar la función 2\n");
    pthread_exit(NULL); /* Provoca la terminación del thread*/
}

/*Función main*/
int main(void)
{
    thmain = pthread_self();
    /*La propia función main es un thread*/
    /*inicializa los parámetros de los threads por defecto*/
    pthread_attr_init (&attr);
    printf("Soy la función main y voy a lanzar los dos threads \n");
    pthread_create (&thread1, &attr, func1, NULL);
    pthread_create (&thread2, &attr, func2, NULL);
    printf("Soy main: he lanzado los dos threads y termino\n");
    pthread_exit (NULL);
}
